Lightweight three-dimensional display

ABSTRACT

A computer-implemented imaging process method includes generating a progression of images of a three-dimensional model and saving the images at a determined location, generating mark-up code for displaying image manipulation controls and for permitting display of the progression of images in response to user interaction with the image manipulation controls, and providing the images and mark-up code for use by a third-party application.

CROSS REFERENCE TO RELATED APPLICATION

This application is a continuation of U.S. patent application Ser. No.13/367,226, filed Feb. 6, 2012 which is a continuation of U.S.application Ser. No. 12/053,399, filed on Mar. 21, 2008. Bothapplications are incorporated by reference in their entirety.

TECHNICAL FIELD

This document relates to systems and techniques for developingrepresentations of real world objects that appear three-dimensional butcan be displayed without special three-dimensional techniques.

BACKGROUND

If a picture is worth a thousand words, a three-dimensional model may beworth a million. Computer models, developed on computer-aided design anddevelopment (CADD) systems, are used in a variety of industries to helppeople better understand and visualize the object being modeled, withoutrequiring someone to build that object. For example, architects cangenerate virtual walkthrough tours of buildings before they are built sothat clients can visualize internal spaces and also see how a buildingmight look on its site. Engineers can build whole systems to better seehow various parts will fit together. And biologists and chemists canbuild objects that already exist but that are too small to be seeneasily, such as molecules.

Processing of three-dimensional models requires extensive computationalcapabilities, however. That is because an enormous number of faces on anobject may need to be computed (i.e., whether a surface is visible,etc.), as does the way that light interacts with and reflects off ofthose surfaces. Also, a user may need to install particular software tohandle the display of three-dimensional models, such as VRML orQuicktime VR. The model can also be turned into a movie that requiresless processing power to display, but in that case, the user may losethe ability to interact freely with the model.

SUMMARY

This document describes systems and techniques that may be used togenerate a three-dimensional experience for a user without the need forspecial three-dimensional software. For example, a user may be allowedto manipulate a model in space in a web browser without needing specialsoftware such as a FLASH plug-in or the like.

In general, the techniques discussed here generate a plurality of imagesof a model in a seamless procession and place those images in a definedlocation. The techniques then generate web browser code, such as HTMLcode, that produces controls for cycling through the images and alsopoints to the particular images. The code can then be accessed from aweb browser (e.g., by pointing the browser to the URL for the code).

In certain implementations, such systems and technique may provide oneor more advantages. For example, developers may develop pages by whichusers can interact with three-dimensional models—represented as a seriesof two-dimensional figures—without having to worry about whether theusers will have particular software programs or plug ins. Consumers maybe enabled to have a richer interactive experience on a variety ofdevices without needing the computational horsepower for fullthree-dimensional modeling and without having to install and maintainparticular software. As a result, a typical user may be provided with aricher experience in viewing a web page.

In one implementation, a computer-implemented imaging method isdisclosed. The method comprises generating a progression of images of athree-dimensional model and saving the images at a determined location,generating mark-up code for displaying image manipulation controls andfor permitting display of the progression of images in response to userinteraction with the image manipulation controls, and providing theimages and mark-up code for use by a third-party application. Thethird-party application can comprise a web browser, and the web browsercan permit interaction with the images in the web browser's native form.

In some aspects, generating the seamless progression of images comprisesdirecting a three-dimensional modeling application to take pictures in aloop around a perimeter of the three-dimensional model. The method canalso comprise packaging the images and mark-up code for transmission toa remote third-party application. In addition, the method can includetransmitting to the third-party application a URL for the mark-up code.The method can further involve receiving from a user an indicatorrelating to a number of images to generate around an exterior of thethree-dimensional object and generating the images at substantiallyequally spaced positions around the exterior of the three-dimensionalobject. In addition, the method can further include storing each imageof the plurality of images as a separate image file, and generating themark-up code to refer to the image files.

In some aspects, the mark up code can be executed by a native webbrowser without using browser plug ins. The method can also comprisereceiving, from a user, an indication of an image traversal path andgenerating the progression of images along the image traversal path. Theimage traversal path can be defined by points distributed in multipledimensions about a sphere at time. The method can also includegenerating a display in a browser associated with the model, receivinguser parameters identifying the determined location, and communicatingthe determined location to an operating system.

In another implementation, a computer-implemented model viewing systemis disclosed. The system includes a CAD program adapted to generatetwo-dimensional images of a three-dimensional model, an image generationmodule to cause a plurality of two-dimensional images of thethree-dimensional model to be created by the CAD program, and a codegenerator to create mark up code that, when executed, causes aprogression of the two-dimensional images to be displayed so as tocreate a visual impression of movement of the three-dimensional model.The image generation module can define an imaging path about thethree-dimensional model and a virtual camera operated by the CAD programis operable to be controlled by the image generation module to captureimages from locations corresponding to the imaging path. In addition,the system can include a web browser capable of displaying theprogression of the two-dimensional images in the browser's native form.The system can also include means for communicating a user selection ofa storage location for the two-dimensional images from a web-basedapplication to a computer operating system.

In certain aspects, the image generation module is programmed to captureand save digital images having a predefined naming structure so that theimages may be accessed in sequence by name. In yet other aspects, thecode generator creates the code using a code template and providesmodel-specific information for use with the code template.

In yet another implementation, a computer-implemented model viewingsystem is disclosed, and comprises an interface configured to receiveuser input regarding imaging of a three-dimensional model into aplurality of images, a plug in application to communicate with anapplication displaying the three-dimensional model so as to cause theapplication to generate a plurality of images of the three-dimensionalmodel, and means for generating mark up code for displaying theplurality of images in progression. The system can further comprisemeans for communicating between an browser-based application and anoperating system file system to identify a location for saving theplurality of images.

The details of one or more embodiments are set forth in the accompanyingdrawings and the description below. Other features and advantages willbe apparent from the description and drawings, and from the claims.

DESCRIPTION OF DRAWINGS

FIG. 1 is a conceptual diagram of a process for capturing a 3-D modelfor display as a series of 2-D images.

FIG. 2 is a block diagram of an illustrative image capture system.

FIG. 3 is a flow chart of an example process for capturing images of a3-D model.

FIG. 4 is a swim lane diagram showing a process for displaying a 3-Dmodel using a progression of 2-D images.

FIG. 5 is a flow chart of an example process for capturing images of a3-D model and saving the images using a conduit application.

FIG. 6 is a swim lane diagram showing a process for generating anddisplaying a 3-D model using a progression of 2-D images with the helpof a conduit application.

FIG. 7 shows a mobile device displaying a 3-D model using 2-D images.

FIGS. 8A-8F show screen shots of a process for capturing and using 2-Dimages of a 3-D model.

FIGS. 8G-8J show screen shots of dialog boxes for managing image captureof a model.

FIG. 9 shows an example of a computer device and a mobile computerdevice that can be used to implement the techniques described here.

Like reference symbols in the various drawings indicate like elements.

DETAILED DESCRIPTION

This section describes various systems and techniques for generatingrepresentations of 3-D models, where the representations can bedisplayed in a manner very much like a display of the model itself, butwithout the computational overhead associated with manipulating a true3-D model. In the examples discussed here, a plug-in for a 3-D CADDsystem or similar application causes the system to orbit a model whilecapturing images of the model, so as to create multiple images fromroughly evenly-spaced vantage points around the model. The plug-in canthen automatically generate mark up code that permits easy manipulationof the 2-D images from a web browser, so that the images can bedisplayed in order to provide the effect of a 3-D object that is beingspun around by a user in real time.

The plug-in may operate, in certain circumstances, by opening a browserwindow that an operator may use in setting parameters for creatingimages of the model. As one example, the operator may select a folder orother location into which files associated with the imaging process areto be placed, so that they may be accessed later for viewing. Such anapproach is not trivial because generally, a web page does not haveaccess to a file system on a computer, or the access depends on the typeof computer on which the page is being displayed. However, in techniquesdescribed below, the web page code, such as JavaScript code, maycommunicate with a native application that is loaded on the computersystem and serves as a conduit for the web page program. The web pagecode may cause the native application to interact with a file managementsystem on the computer, so that the web page code may have access,indirectly, to files on the computer.

FIG. 1 is a conceptual diagram of a process 100 for capturing a 3-Dmodel for display as a series of 2-D images. In this representation, amodel 102 of an automobile, here a Lamborghini, is shown from above.However, the model will be understood to be a 3-D model that may berendered in a CADD system and may be viewed from a variety of angles. Anumber of cameras 104 are shown around the model to depict thegeneration of images of the model from various angles. The cameras 104are positioned at roughly equal divisions around the perimeter of themodel 102, and at a distance such that the entire model will be imagedin any virtual photo taken of the model 102 by the cameras 104. Theheight of the cameras relative to the model can be set or can beselected by the user—also, different cameras 104 around the model 102can be at different heights from each other.

The number of cameras 104 may be selected, such as by a user, to providea number of two-dimensional images of the 3-D model 102 such thatflipping from one image to the next will provide a relatively smoothrendering of the model. In particular, a user may selectively cyclethrough images taken by adjacent cameras in a progressive manner, tocreate a virtual animation of the model. Where the model is placedagainst a white or invisible background for the imaging, such flippingfrom image to image will make it appear to a viewer like the model isrotating freely in space. As a result, the visual effects for the vieweris somewhat like that provided by old flip-books or by the popular movieThe Matrix, except with the model appearing to rotate in space, ratherthan the camera appearing to move about the model.

A webpage 106 is shown conceptually below the model 102. In concept, thewebpage 106 is shown to represent the manner that the images of themodel 102 may be displayed to a user of a web browser after the imagingoperation has occurred.

The webpage 106 includes a display area 108 where images of the model102 may be displayed to a viewer of the web browser. Other adjacentimages, such as image 110, are shown in the figure next to image 108. Inactuality, the other images would not be viewable to a user when image108 is being displayed. Rather, the other images are shown conceptuallyhere in the form of a filmstrip to indicate that, when a usermanipulates controls below image 108, the other images will be displayedin order. As a result of such progressive display of the images, theuser may generate the visual effect of rotating the model in spacewithin the area shown for image 108, simply by causing the variousadjacent images to be displayed in an appropriate order. In certainexamples, the user may flip back and forth quickly between the images,with the result being that the object appears to be grasped and rotatedin front of the user. In reality, however, the user will simply beviewing the individual images in sequence in a common area on theirbrowser.

Because the webpage 106 displays static images rather than actualthree-dimensional models or complex animations such as flash-basedanimations, a user may view webpage 106 in certain circumstances withoutthe need for any particular web browser plug-ins. For example, thetechniques discussed here may permit a user to obtain Flash effectswithout the need for Flash. Also, a user may be able to achieve suchseeming three-dimensional control on a light weight client, such as amobile device or other computing device that has limited computationalpower.

FIG. 2 is a block diagram of an illustrative image capture system 200.The system 200 generally includes a number of components in a computersystem that are adapted to generate a collection of files, includingimages of a 3-D model and code for generating views of those images, andfor running the code and displaying the images. Although shown in thisexample as a single computer, the various components may reside on oneor more computers and may be managed by different entities. For example,programs for generating images and code for viewing the images may beoperated by a first entity, while programs for running the code andviewing the images may be operated by a different entity.

The system 200 includes an imaging computer 202 that includes, forexample, a 3-D modeler 208. The 3-D modeler 208 may comprise any of avariety of computer-aided design programs that permit the constructionof 3-D objects and the viewing of such objects. In addition, in certainimplementations, the 3-D modeler 208 may include functionality togenerate images of models rendered by the system. Such functionality maycommonly include an interface that permits a user to position aviewpoint and an angle of view for a virtual camera, and may also permitthe definition of a field of view, such as by selecting a virtual lensfor the camera.

Control of such a virtual camera and generation of 2-D images of the 3-Dmodel may occur with a 2-D renderer 206. The 2-D renderer 206 may createa standard image file, such as a JPEG file, in response to commands toprovide an image of a model from a particular point at a particularangle. The 2-D renderer 206 may also accept commands, such as commandsreceived through an application programming interface (API). Forexample, another program may operate according to the API to control thepositioning of a virtual camera by the 3-D modeler 208, and thegeneration of images by the 2-D renderer 206.

Models for the 3-D modeler 208 may be stored in a models database 210.The database 210 may take a variety of forms, and may store each modelin a separate file. Various models may be combined into one commonmodel, such as by providing each model with a particular base point, andopening multiple models into a single model space. When such multiplemodels are opened near each other, imaging of the multiple models mayoccur using 2-D renderer 206. Database 210 may be implemented, forexample, like the model warehouse component of GOOGLE SKETCHUP.

An image generation module 204 may operate, such as through an API asdescribed above, to cause automatic rendering of images by the 2-Drenderer 206 through the 3-D modeler 208. The image generation module204 may be programmed, for example, to interact with a user or anapplication in identifying locations around a model for placing avirtual camera, and a number of different images that are to be capturedof the model. The image generation module 204 may be a native programthat has been installed on the computer 202, and that runs separately ofother programs on the computer 202. In one example, the image generationmodule may be written in a language such as Ruby.

The image generation module 204 may, in one implementation, cause adialog box to be generated for interacting with the user. The dialog boxmay take a variety of forms, and in one example, may take the form of aborderless web browser 212. The web browser 212 may operate in afamiliar manner as one of a number of common browsers, such as theMICROSOFT INTERNET EXPLORER, the FOXFIRE browser, or the APPLE SAFARIbrowser. In appropriate circumstances, the browser may operate accordingto the techniques described in this document, without the need foradditional plug-ins or other components.

Pages within the web browser 212 may have difficulty accessing data onthe computer 203 because of security restrictions that are part of theWeb browser. As a result, a file system interpreter 213 may be providedon the computer 202. In one example, the file system interpreter 213 ispart of or associated with the image generation module 204, and may bepart of a native application, such as an application written in Ruby,running on the computer 202.

The file system interpreter 213 is configured to communicate with aprogram running on the web browser 212, such as JavaScript code runningon the web browser 212. The JavaScript and Ruby programs may communicateaccording to a prearranged communication protocol. Using such aprotocol, the JavaScript running on the web browser 212 may makerequests of the file system interpreter 213 that may be interpreted bythe file system interpreter 213. For example, the JavaScript code orother similar code running on the web browser 212 may requestinformation about files on computer 202. Such a request may include arequest to determine the folder structure on the computer 202. The filesystem interpreter 213 may respond to such requests by making a standardoperating system request for data for a file system dialog box. Uponreceiving data associated with the dialog box, the file systeminterpreter 213 may parse such data to determine a file structure on thecomputer 202, and may return such information to the application runningon the web browser 212. For example, the file system interpreter 213 maypass a list of folders in a particular directory to the applicationrunning on the web browser 212.

The application running on the web browser 212 may take such informationand display it in a manner that appears to a user as if an actual filesystem has been accessed by the program running on the web browser 212.For example, the program may generate a borderless webpage that has theappearance of a file dialog box, and may access a number of storedimages to show icons such as folders and other similar organization fora file system. The program may also display, with the icons, textualdescription of the folders, so that a user is presented with a webpagethat looks like a file system dialog box.

As described in more detail below, user interaction with the webpage mayinclude commands from the user, such as requests to save files in aparticular folder, requests to create a new folder, or requests to moveup and down in a folder hierarchy. Such requests may be interpreted bythe program running on the Web browser 212 and passed to the file systeminterpreter 213 according to an agreed-upon protocol. The file systeminterpreter 213 may translate such requests and in turn make certaincalls to a file system on an operating system for the computer 202. Forexample, the file system interpreter 213 may drill down in a set offolders in response to a user selection, and may pass back to theprogram running on the web browser 212 a new list of subfolders or otherappropriate information. In general, each time that the user interactswith the webpage that looks like a file system dialog box, the programrunning on the web browser 212 may make a request to the file systeminterpreter 213, which may in turn access information stored on computer202. The file system interpreter 213 may then analyze such returnedinformation and pass it back to the program running on the web browser212 in a manner that can be used by such program.

The file system interpreter 213 ultimately provides to the programrunning on web browser 212 a view of data in a web data store 214. Theweb data store 214 may include a number of Internet-based files, such asHTML files, image files, stylesheet files, and other similar files. Inaddition, the file system interpreter 213 may, in response to usercommands, cause certain files generated by the 2-D renderer 206 to besaved in a particular folder in the web data store 214. The web datastore 214 may include, in particular, a portion of a standard disk orflash storage structure on computer 202. Such storage and the operationof the programs described here may, of course, be spread across multiplecomputers and/or storage devices.

The file system interpreter 213 may generally be a native applicationrunning on the computer 202, so that it has access to the full range ofservices from the computer's operating system, including file managementservices and dialogues. In this manner, the file system interpreter 213may permit the program running on the web browser 212 to access files oncomputer 202 where it would otherwise not be able to access them.

The system 200 may generate a variety of outputs in response to userinteraction with the system 200. For example, the web browser 212 maydisplay a variety of webpages 216 a, such as dialog boxes needed forinteracting with a user in capturing and saving images of a 3-D model.In addition, the webpages 216 a may include a webpage for displaying andinteracting with the images. The web browser 212 may also displayvarious animations, such as interactive animations that flip from imageto image, as discussed above with respect to fig one, or other suchmoving and interactive features for a user of a webpage.

In providing such data and interaction, the computer 202 may generate anumber of files for permitting interaction with a plurality of imagesthat simulate a three-dimensional model. For example, HTML files 218 amay be generated automatically, such as files to present a webpage thatshows the images to a user and allows the user to interact with theimages so as to display various different images after each other inorder to create an experience similar to full interaction with a 3-Dmodel. In addition, the computer 202 may generate a plurality of imagefiles, such as JPEG, GIF, TIFF, and other similar file format imagefiles. The computer 202 may also generate cascading style sheet (CSS)files 218 c that may additionally define the particular layout and lookof web pages to be generated by the system 200. Finally, the computer202 may generate JavaScript code 218 d and may otherwise use suchJavaScript code 218 d. For example, such code may be used to generatedialog boxes for capturing 2-D images, and may also be used to displaysuch images later on a webpage that permits interaction with the imagesby a user.

FIG. 3 is a flow chart of an example process 300 for capturing images ofa 3-D model. In general, the process 300 involves identifying a 3-Dmodel, capturing a plurality of 2-D images by circumventing the modelwith a virtual imaging apparatus, generating code for later reviewingsuch images in a convenient and interactive manner, and later runningsuch code and receiving interactions by the user.

At box 302, the process 300 first receives a selection of a model toimage. For example, a user may initially open a model in a CAD programand may then select a control, such as an icon, within the program tobegin a process of imaging the model. The control selected by the usermay, for example, represent a plug-in provided with the CAD program forsuch imaging of models.

At box 304, the process 300 identifies imaging locations associated withthe model. In one typical example, the locations may be at points alonga circle, oval, or other geometric shape that circumscribes a patharound the object. The location of each view relative to the next viewmay be provided by a user specifying an angle—e.g., if the userspecifies ten degrees, each view will be ten degrees apart and therewill be thirty-six images. Alternatively, the user may specify thenumber of images. The imaging locations need not be evenly spaced,however. In one example, the user may manually drag and drop the imaginglocations into place, such as by starting with evenly-spaced icons ofcameras that are placed automatically around the model, and thenadjusting those icons. The user may generate previews of the resultinganimation around the model (in a manner like that discussed below) andmay then adjust the camera icons until they achieve an effect that theydesire.

The particular locations for the imaging may be computed, in somecircumstances, by computing the smallest X, Y, and Z point in the model,and the largest such point. A virtual sphere that contains the twopoints may be generated and may be considered to bound the model. Aseparate circle or other path may then be selected that is sufficientlyfar outside the sphere, given the parameters of a virtual cameraprovided with the program (e.g., position and field of view), that thecamera, when aimed inward toward the sphere, may capture all of thesphere within its field of view.

The actual path for the camera may take on a variety of forms. In asimple example, the path may be a circle or oval with the camera at asingle height relative to the model. In a more complex example, the pathmay be sinusoidal, and thus vary in multiple dimensions, such that asthe path moves around a model, the camera also moves up and down. Such acircular and sinusoidal path may provide alternating views near the topand bottom of the model. For example, such a path may permit images ofan automobile to show both the roof and the underbelly of the automobilewhere appropriate. In yet another example, the path that circumscribesthe model may take the form of a sphere with positions for the virtualcamera selected at approximately equal distances around the sphere.Using such a path, or collection of points, may enable a user tointeract with the images so as to spin the model, or a least appear tospin the model, around multiple axes.

The user may also specify the size of the images to be output. Such sizemay be specified, for instance as a number of pixels in the X and Ydimensions. Such scaling may be particularly convenient where the imagesare to be incorporated into a web page, where many elements areexpressed in terms of pixel dimensions.

At box 306, the process 300 begins a repeated process of locating thecamera at a particular point in the circumscribing path, and generatinga 2-D image, as shown at box 308. Such activity may occur automaticallyusing a particular CAD package, as controlled through API imports fromanother application, such as the image generation module 204 of FIG. 2.As each image is acquired, the process 300 may perform particularfunctions on the image. For example, background items may be eliminatedfrom the image, as may phantom lines or other lines such as axes fromthe modeling program.

Also, certain styles may be referenced for the imaging process. Forexample, users may set up preferring lighting scenarios for theirmodels, such as by locating lighting sources in 3-D space and specifyingthe parameters (e.g., color and intensity) for the lighting sources. Auser may also specify textures and materials for the model or for otheritems in an image.

Also, the positions along a circumscribing path may, in mostcircumstances, be equally spaced in a circle or oval. But otherarrangements may also be used. For example, images may be analyzed froma variety of positions around a model, such as on a sphere around themodel, and a degree of difference between the various images may becomputed. Such degree of difference may be performed using a variety ofknown techniques, such as by comparing distances between common pixelsin different images and the degree of change in various pixels in theimages. Positions about the model may then be selected automatically soas to provide images that differ from each other in substantially equalvisual amounts. For example, the imaging locations may be closer near anarea of a model that contains significant detail, but may be fartherapart on a less detailed portion of the model. In this manner, positionsmay be selected that provide a smoother experience for a user who laterreviews such images, such as in a manner described below.

The images may also be taken of a real object. For example, a personwishing to list their automobile as part of an on line auction may takea plurality of digital photographs of the automobile at a common height(their eye level) at common spacing (e.g., taking two side steps betweeneach shot) around the automobile. They may then save the images to asingle folder, and applications like those discussed here may identifythe image files, arrange them numerically by title (if the camera namedthe images sequentially), and generate the code needed to review theautomobile with a 3-D effect as discussed next.

Once each computed imaging location has had an image generated for it,and the images have been saved to a determined location, the method 300may generate and save code to support the images, at box 310. Such codemay take the form, for example, of HTML and CSS code that points to thevarious images, for displaying the images in an appropriate progressionand order. In particular, the code may generate a control for scanningforward and backward through the images, and may sequentially call upeach image for display as the control is manipulated by a user. Theparticular code may be generated from a template into which is addeddata for the particular images that are to be viewed. For example, fromone instantiation to the next, the names of the particular figures andthe number of figures may change but other aspects of the code mayremain the same. Thus, the template may be written to operate on anarray of images, and the code generation process may simply add theparticular file names to the array. The code may also stay as templatecode, and the parameters for particular images may be referenced by thecode, such as by referencing data files for the imaging of the modelfrom JavaScript code or the like.

At box 312, a second phase of the process, i.e., viewing of the imagesin a manner that makes them look like they are still part of a 3-Dmodel, begins. In this example, such viewing may occur by pointing abrowser to the code generated in box 310. Such an action may occur bythe process 300 causing a browser to be launched and pointed at suchcode. Launching of the browser pointed at the code may cause the browserto execute the code, which may in turn cause the generation of controlsfor viewing the images of the 3-D model, and may initially display abase image, at box 314. The base image may be any of the generatedimages, but may typically be a first image of the model that was takenin the process 300, such as a front view of the model.

At box 316, a user interacts with the webpage that has been generated bythe code with the browser, which may cause various different ones of thecaptured images to be displayed. For example, the user may click on theimages themselves and pull left or right to indicate that they wouldlike to have the code fetch a different image of the model. Such actionmay then cause the other images to be displayed in turn. If properlyintegrated, such activity may appear to the user to involve pulling of athree the model left and right so as to view the model from variousangles, much like may occur with VRML models in a more heavyweightimplementation.

FIG. 4 is a swim lane diagram showing a process for displaying a 3-Dmodel using a progression of 2-D images. In general, this process 400 issimilar to the process 300 shown in FIG. 3, but indicates particularexemplary components within a system that may perform various steps inthe process. In this example, the components include a modelingapplication, which may be a native application on a computer that isconfigured to cause 2-D images to be generated that are representativeof a 3-D model. Another component is a CAD program, which may be ageneral commercial design program made to permit the generation of 3-Dmodels, and the imaging of such models, in convenient manners. A thirdcomponent is a standard web browser, which in this example need not beprovided with particular plug-ins such as VRML or FLASH plug-ins.

The process begins at box 402, where the modeling application receivesan imaging command and requests a model name. The CAD program may, atthat time, already be displaying a model in front of the user. Such acommand may come from a user selection of an icon that is presented aspart of the CAD program, where the modeling application operates as aplug-in for the CAD program. At box 404, the CAD program returns a nameof the model, so that the modeling application may use such a name as adefault name for the collection of files, such as images, that are to begenerated in association with the model. In addition, the CAD programmay pass a string identifying a default folder into which filesassociated with the model are to be stored.

At this point, the modeling application may cause a dialog box to bedisplayed, such as by generating a webpage over the display of the CADprogram. The dialog box may permit a user of a system to identify alocation for storing files that is different from a default location,and also input parameters for camera locations in generating images ofthe model. For example, the user may select between a path thatcircumscribes the model horizontally or vertical, may select a shape forthe path, and may also select a number of images to be captured alongthe path. Alternatively, the user may select to have images acquiredfrom all directions pointing inward toward the model from a sphere. Themodeling application may then interact with the CAD program to computecamera parameters, such as the base locations for the camera in themodel space and the direction of the camera for each shot.

At boxes 408 and 410, the modeling application then steps through thelocation information for each imaging location and causes the CADprogram to generate a 2-D image of the model from the particularlocation, and to save the image (e.g., as a JPEG file) to the folder ordirectory selected by the user. The image names may be determined by theprogram, such as by providing them with the model name as a prefix, anda sequential index number as a suffix, e.g., car01.jpg, car02.jpg,car03.jpg, etc.

When all of the images have been acquired, the modeling applicationcauses various files that support the images to be generated. Inparticular, HTML code is generated, where the code causes the display ofa webpage that fetches the individual 2-D images in progression, inresponse to interaction from a user, and causes the images to bepresented so as to provide the impression that the actual model is beingmanipulated. Other such files may also be generated, such as CSS andJavaScript files. Those files may also be saved to the folder ordirectory selected by the user.

The user or another user may be readily directed to the figures by themodeling application sending a URL of the generated HTML code (box 414).Such transmission may occur in a variety of manners (box 416), includingby redirecting a web browser to the URL so that the code is executed bythe web browser, and an initial image from the images is displayed (box418). The user may then interact with the displayed web page in avariety of manners to have the various images displayed in order toprovide the effect of working with the model itself. Generally also, theimages will wrap all the way around the model without a seam so thatdisplay of the model via the 2-D images does not include any substantialvisual hitch, i.e., the images will be acquired from a continuous patharound the model, so that a user can rotate all the way around the modelwithout knowing where the first and last images were taken.

FIG. 5 is a flow chart of an example process 500 for capturing images ofa 3-D model and saving the images using a conduit application. Thisprocess bears similarities to those described above, but focuses more onthe interaction of a non-native application that does not have directaccess to certain operating system services, and a native applicationthat does have such access and that serves as a conduit to such servicesfor the non-native application. In general, the process involvesinteracting with a user via a program, such as a program running on awebpage (e.g., in JavaScript), that does not have open access to a filesystem because of restrictions placed on the program by the applicationin which it is operating. The program achieves such access bycommunicating with a second application outside the first application,that is installed on the computer and can run independently and interactdirectly with the operating system, and thus may be considered a nativeapplication. Such a process may take place, for example, in receivinguser input regarding a location to save certain files, by building afile manager dialog box that resembles an actual box, as described inexamples above and below. For the most part, the process 500 here isdescribed from the standpoint of the program running on the web pagethat generates an interface for a user.

Starting at box 502, a user interface is initially displayed. Theinterface may be placed over an application such as a CAD applicationand may permit a user to specify locations for saving images of the CADapplication. The interface may include various elements for interactingwith a file system on the computer on which the interface is displayed.For example, the interface may be formed as a borderless webpage thatsimulates the look of a file system dialog box. The dialog box mayinclude, for example, an area for entering a file name, and a largerarea showing a hierarchical folder structure for a computer storagesystem.

The initial display of the interface may lack particular informationabout the file system, as in this example, or communications withanother program may initially occur to produce a starting display offile system information. For example, the identify of a default foldermay be stored, and the process may access data defining the defaultfolder so that it is initially displayed. Alternatively, a root folderfor a particular storage drive may be displayed. Such display of defaultfolders may require communication between the program generating theinterface and a native application on the computer, as described below.

At box 504, a file-related command is received. For example, a user maychoose to save a file, to display file or folder-related information inthe dialog box, to open a file, to create a new folder in a file system,to delete a folder, or to perform other similar functions in the system.At box 506, a native application is opened. This application isseparately stored on the system and may access the operating systemfeatures directly, and thus may serve as a conduit for the initialapplication that opened the interface, in accessing the operating systemfile system. The opening of the native application may occur in avariety of manners, such as by the program that generated the userinterface making a call for such a native application.

At box 508, a request is made for a list of directories from the nativeapplication. For example, the program that generated the interface mayneed to display a number of directories in response to a request from auser. That program may thus identify directory-related information andpass it in a determined manner, such as by an application programminginterface (API), to the native application. The native application mayin turn be programmed to receive, recognize, and interpret suchrequests. For example, the native application may parse a messagereceived from the program that generated the interface, and create itsown request formatted in an appropriate manner for a file systemassociated with an operating system on the computer. The request fromthe program that generated the user interface may be an asynchronousrequest, such as a request using AJAX methods, so that such program maycontinue operating while waiting for information to return from thenative application.

At box 510, the program receives a list of directories or folders fromthe native application and displays the list. The list of directoriesmay have been created by the native application by formatting a requestto a file managing component of an operating system and receiving aresponse to that request. The native application may then have extractedinformation from the response and reformatted that information fortransmission to the program that generated the user interface. Forexample, the native application may send a list of strings formatted ina particular manner, where the strings represent folder names orsubdirectory names in a particular directory.

Upon receiving such names from the native application, the program maydisplay a list of such folders. To do so, the program may access imagefiles that show icons representative of folders in an operating system,and may display those icons in a list with the textual information aboutthe folders received from the native application. Such display may occurin a box on the user interface that corresponds to a typical folder ordirectory display area in a file manager interface. As a result, theuser may be presented with a display that makes it look like theoriginal program is actually accessing file management features of theoperating system directly, rather than indirectly. Such an exampledisplay is shown in FIG. 8B.

At box 512, a user command is received. For example, the user commandmay be a click by the user on a particular folder icon in the displayedlist, indicating that the user would like to see the subfoldersunderneath the selected folder. The program generating the interface mayinterpret such a selection, and provide data to the native applicationaccording to the API, to indicate that the native application shouldgather from the operating system a list of subfolders (box 514).

The native application may thus in turn send to the operating system arequest for a subfolders list or other data indicating the identity ofthe sub-folders. Such a request may occur while the program thatgenerated the interface continues with other operations while waitingfor a response (i.e., asynchronous operation). As in the interactiondescribed above, the native application may receive information from theoperating system, may reformat the information appropriately, and maypass the new information to the program that generated the interface.That program may then update the strings and folder icons shown in thedisplay so as to make it look to the user like they actually drilleddown in the directory structure (box 516). Such updating may occur, forexample, by editing a DOM tree associated with the display in a familiarmanner.

Until the file operation is terminated (box 518), the process 500continues to wait for and accept user commands with respect to the filesystem. Once the file operation is terminated, the process continues(box 520) such as by saving or opening a file selected by the user.

The file access process may take on, in one example, four differentstates. In a first state, the target directory is unselected and closed.Clicking on it selects it (e.g., by highlighting it and updating itstitle bar) and opens it. JavaScript code or other such code then makes acall to a native application, such as a Ruby application, for thesub-directories, and the native application reports back in anasynchronous manner the children or an error (e.g., the directory wasnot found). The JavaScript then modifies the HTML DOM to show thedirectory as selected, the icon for the directory as an open folder, andthe subdirectories slightly indented from the directory, with closedicons. The selected directory label may also be changed in response tothe selection.

In a second state, the target directory was unselected and open (ratherthan closed). Clicking on the directory highlights the directory in theinterface and updates the label that indicates which directory isselected.

In a third state, the target directory was selected and closed. Clickingon the directory causes the JavaScript to issue a request to the nativeapplication for the sub-directories, and the JavaScript receives theresults in an asynchronous fashion and presents the sub-directories assub-nodes of the directory (slightly indented and with closed foldericons). The JavaScript also swaps in an open folder icon for theselected directory.

In a fourth state, the target directory was selected and open. Clickingon the directory causes the JavaScript to edit the DOM to show thedirectory as closed (but still selected) and hides the sub-directories.If the user clicks on an “OK” button in the dialog, the selecteddirectory is passed to the calling application and the dialog closes.

In other situations, the user may select a control to create a newdirectory, much like they would in a normal file management dialog. Sucha selection will bring up another dialog box, which will shadow out theoriginal dialog box. The user can enter a new directory name for thesubdirectory, which name the JavaScript will pass to the nativeapplication, which will in turn cause that sub-directory to be createdand pass an indicator of success of the operation back to the program inan asynchronous fashion. The JavaScript may respond to the message ofsuccess by adding a new sub-directory indicator to the DOM, and byopening it as the selected sub-directory.

FIG. 6 is a swim lane diagram showing a process 600 for generating anddisplaying a 3-D model using a progression of 2-D images with the helpof a conduit application. In general, the process 600 is similar to theprocess 500 in FIG. 5, but shows other operations and additional detail,in addition to showing particular components that, in this example, maybe used to perform certain actions in the process. These componentsinclude an imaging application that is responsible for interacting withthe user in capturing images from a CAD program, where in this example,the imaging application is written at least in part using JavaScript.The components also include a file system that the other componentsaccess to obtain stored information and save additional information.Finally the components include a conduit application, written here inRuby, that is an application separate from whatever application theimaging application is running in, and that communicates directly withoperating system components so as to be able to serve as a conduit forthe imaging application.

At box 602, the model selection is initially received in a CAD program.Such a selection may take a familiar form, such as by a user selecting adata file “open” icon and selecting a file from a list of multiplefiles. The selection may also occur in the manner known for the GOOGLESKETCHUP 3-D warehouse. The file system responds by serving model datato the CAD program (604), and the CAD program displays the model, at box606, in a typical manner.

The CAD program may be provided with a plug-in program that correspondsto the imaging application, and an icon for the program may be shown onthe display of the CAD program. Selection of the icon by a user maylaunch the imaging application, which may be programmed to capture aplurality of sequential images of the model in the CAD program and savethe images and generated markup code in a manner that a webpage maydisplay the images to evoke an impression that the viewer is actuallymanipulating the model, and not just a series of images.

Upon receiving an imaging selection, the CAD program may cause theimaging application to be launched (box 608). Upon opening, at box 610,the imaging application may display an imaging window. The window maybe, for example, a borderless browser window that is formatted toresemble a file access dialog box (see, e.g., FIG. 8A). The dialog boxmay initially show several default values such as a name to beassociated with the images that matches a name of the model obtainedfrom the CAD program, a number of images to obtain of the model, and alocation for saving image-based files. At box 612, the process receivesvarious inputs for such values, and also receives a request from a userto see the file structure on the computer system on which the imagingapplication and conduit application are running, and on which the filesystem is operating. The imaging application, in response to the userrequests, sends a request to the conduit application, which the user mayhave previously installed on the computer for the purpose of allowingthe imaging application to indirectly interact with the file system.

Upon receiving the request, the conduit application translates therequest and sends the corresponding request to the file system to checka file structure (box 614), such as to obtain a list of file folders ina root directory for the file system. At box 616, the file systemreturns the file structure in a familiar format for the particularoperating system, to the conduit application. The conduit applicationthen, at box 616, generates code for modifying the DOM to reflect anupdate in the interface that shows the file structure obtained from thefile system. At box 620, the imaging application updates the display.Alternatively, the imaging application, rather than the conduitapplication, may generate the appropriate code for modifying the DOM.

A user may then be presented with a dialog box that shows a number ofsubdirectories that may be selected, and at box 622, the user selects asubdirectory and thus requests to see the file structure within thatsubdirectory. Again, the imaging application sends a request to theconduit application, the conduit application translates the request andchecks the file structure from the file system (box 624), the filesystem returns the file structure (box 626), and the conduit application(alone or in cooperation with the imaging application) again generatescode for modifying the DOM structure of the display so as to reflect thechange in the directories, e.g., to switch an icon of a selecteddirectory from a closed image to an open image, and to add a list ofsub-directories (with closed folder images) indented from the maindirectory (box 628).

The user may then, by clicking on a particular control, select theparticular directory for saving files, thus causing the path for thefolder to be saved and the file dialog box to disappear. After thedisplay has been updated in this manner, the user may provide aselection on the next display, which may be another dialog box by whichthe user may establish certain parameters for imaging of a model (box630). At box 632, for example, the user may provide information about acamera to view the model, such as a number of images for the camera tocreate. The imaging application may pass such data to the conduitapplication, in certain implementations, which may then control creationof images by the CAD program (box 634) by interacting back-and-forthwith the CAD program to control the positioning of the camera relativeto the model (box 636). Upon acquiring each image, the CAD program maysave the images in the file system (box 638), and may obtain informationabout the subdirectory in which to save the files from the conduitapplication.

Once the conduit application and the CAD program have stepped throughthe imaging process and saved all necessary images, the conduitapplication may generate code to allow a user to view the images in aconvenient manner. At box 640, for example, the conduit applicationgenerates HTML code for a webpage to display the images in a seamlessmanner as the user manipulates the images so as to create the impressionof rotating the model in space. As noted above, the code may begenerated from a template, where the template defines certain controlelements and display elements, and particular values, such as the numberof images and the names of the image files, may be added during creationof the code.

After creating the necessary code and placing it in a particularlocation, the conduit application may then pass a URL for the code tothe imaging application (box 642) or to another appropriatebrowser-based application or other application. At box 644, the URLcauses the browser to be directed to the code, to load the code, toexecute the code, and to thereby generate a visual display for the userof one of the images along with controls for manipulating the image. Atbox 646 the user chooses to rotate the image so as to be able to seevarious sides of the model represented by the images, and such imagesare fetched from the file system (box 648).

FIG. 7 shows a mobile device displaying a 3-D model using 2-D images. Inthis example, the mobile device is intended to represent a device thathas not had particular three-dimensional imaging plug-ins added to it orother generic 3-D imaging provided for it. Alternatively, the device mayhave such capabilities but may be displaying a webpage whose author wasnot confident that many consumers would have such capabilities, and thusdid not code such capabilities into the page. Shown on the display 710of device 700 is an image of a 3-D model of an automobile from aparticular angle. The device 700 may have a touchscreen, and the HTMLcode for generating the display 710 may respond to lateral draggingmotions across the touchscreen in the area of the display 720, byfetching progressive adjacent images that were generated from the modelof the automobile. Scanning through the images may also be controlled bya trackball located at the middle-right of the device. In this manner,the display 710 may provide a user with interactivity that is otherwisegenerally provided by more complex and involves systems such as flashanimation systems.

FIGS. 8A-8F show screen shots of a process for capturing and using 2-Dimages of a 3-D model. In general, the figures show, in one particularexample, a user initially capturing images of a model, and thenmanipulating those images to achieve a 3-D-like experience using 2-Dimages.

FIG. 8A shows a display 800 of a design or CAD application 802—here, theGOOGLE SKETCHUP application—with an imaging dialog 804 overlaid on theapplication. The program for generating the overlay has been invoked bya plug-in for the application, where the plug-in generates anuser-selectable icon 806. Here, the user has just selected the icon,causing the dialog 804 to be generated over the application. In thisparticular example, the dialog is generated as a borderless web pagethat has display content formatted to look like a dialog box that wouldbe generated by a typical application.

The dialog box 804 presents the user with instructions and the abilityto enter three different parameters for the imaging process. First, adefault name for the imaging is automatically entered in a name box 808,and the user can change that name. The name selected by the user mayaffect the name that is given to image files and to information that islater displayed on an automatically generated web page for displayingthe images. An imaging parameter input box 812 allows the user, in thisexample, to select a number of images to be taken of the model. A highernumber of images will permit for smoother manipulation of the object inthe future, but will take up more space for storing the additionalimages. Here, thirty-six images are to be generated, at ten degreeintervals around the model.

In other interfaces, a user may be provided with alternative oradditional imaging choices. For example, the user may be allowed toselect an axis around which the virtual camera will rotate in creatingimages of the model. The user may also identify a path or path shape(e.g., circle, oval, etc.) for the camera. For example, if the userselects an oval path, the model will appear to move toward the user andaway from the user when they manipulate the images of the model torotate the model in space. Also, the user may be given an option toacquire images from points on a sphere or other 3-D object around themodel.

Example JavaScript code for generating the dialog shown in FIG. 8A isattached hereto in Appendix D. Common functions accessed by that codeare attached hereto in Appendix E.

FIG. 8B shows the application 802 of FIG. 8A with a file manager 814generated in a light box over the dialog box 804. The file manager showsa default directory path and provides a number of controls that let auser select a displayed directory or subdirectory, to create a newdirectory, to cancel the operation, or to confirm the operation (withthe “OK” button) and thus set the currently-selected directory as thedirectory into which files will be saved. The display of FIG. 8B may becalled up by a user selecting the “Change” button in FIG. 8A.

Example JavaScript code for generating the dialog shown in FIG. 8B isattached hereto in Appendices A and G. Example CSS code for the dialogis attached in Appendices B and H. Example HTML code (for generatingimages of a model of a house) is attached in Appendix I.

FIG. 8C shows the dialog box 804 after a user has selected a folder intowhich files are to be saved and has also selected a number of images tocapture of the model. In this figure, the tenth of thirty-six figures isin the process of being captured. The dialog 804 may show each image asit is captured and saved. When the captures are complete, a message tothat effect may be shown to the viewer. Example JavaScript code forcausing the images to be captured is attached hereto in Appendix D.

FIG. 8D is simply a file manager view of the files that were saved bythe process depicted in FIG. 8C. As shown, the files were stored in thec:\program files\Google\Google SketchUp 6\Plugins\orbitalimages\Lamborghini sub-directory. The files include thirty-six image files ofthe car model (labeled “image00.jpg” to “image.35.jpg”), and an HTMLfile named “index.html.” The content of the HTML file is discussed next.

FIGS. 8E and 8F show displays of the web page created by the processjust discussed, where each figure shows one of the images that has beencaptured. A control in the form of a two-headed arrow can also be seennear on top of each image. That control appears when a user hovers theirpointer over the images. If the user then down clicks and drags left orright, such action will cause the model to appear to rotatecounterclockwise or clockwise, i.e., by fetching various of the savedfigures of the model.

HTML template code for generating the dialog is attached in hereto inAppendix F. The HTML code for displaying FIGS. 8E and 8F (which may beformed from the template code) may take, in one example, the followingform:

<HTML>   <HEAD>   <TITLE>SketchUp Orbital Imaging</TITLE>   <STYLE>    #title {text-align: center; font: bold 1.4em arial; margin-bottom:    3em;}     #date {margin-top: 3px; font: normal 0.5em arial;}    #sketchUpObj {text-align: center; width: 400px; z-index: 2;    border: solid 1px #676767;}     #sheet {position: absolute; z-index:3; background-color:     #FF00FF;cursor: w-resize;}   </STYLE>  <SCRIPT>   // list of image filenames     var imageFileNameArray = newArray(‘image0.jpg’,     ‘image1.jpg’,‘image2.jpg’, ‘image3.jpg’,‘image4.jpg’,     ‘image5.jpg’, ‘image6.jpg’,‘image7.jpg’, ‘image8.jpg’,    ‘image9.jpg’, ‘image10.jpg’, ‘image11.jpg’,    ‘image12.jpg’,‘image13.jpg’, ‘image14.jpg’, ‘image15.jpg’,    ‘image16.jpg’,‘image17.jpg’, ‘image18.jpg’, ‘image19.jpg’,    ‘image20.jpg’,‘image21.jpg’, ‘image22.jpg’, ‘image23.jpg’,    ‘image24.jpg’,‘image25.jpg’, ‘image26.jpg’, ‘image27.jpg’,    ‘image28.jpg’, ‘image29.jpg’, ‘image30.jpg’, ‘image31.jpg’,    ‘image32.jpg’, ‘image33.jpg’, ‘image34.jpg’, ‘image35.jpg’,    ‘image35.jpg’);   // list of html image elements     varsketchUpImageArray = new Array( ); var currentPos = 0;     var addToPos= 0; var imageCount = 0; var sketchUpObj =     null; var mouseXOrig; varmouseX = 0; var mouseY = 0;     var mouseIsDown= false; var title =null;   function init( ) {     title = document.getElementById(‘title’);    sketchUpObj = document.getElementById(‘sketchUpObj’);     imageCount= imageFileNameArray.length;  // load up the imageArray with thesketchUp images   for (i = 0; i < imageCount; i++) {    sketchUpImageArray[i] = new Image( );     sketchUpImageArray[i].src= imageFileNameArray[i];     sketchUpImageArray[i].className =‘sketchUpImage’;     hide(sketchUpImageArray[i]);    sketchUpObj.appendChild(sketchUpImageArray[i]);     } // create atransparent sheet over the images so that the mouse // events go it  var sheet = document.createElement(“DIV”);  document.body.appendChild(sheet);   sheet.id = “sheet”;  sheet.style.left = sketchUpObj.offsetLeft + “px”;   sheet.style.top =sketchUpObj.offsetTop + “px”;   sheet.style.width =sketchUpObj.offsetWidth + “px”;   sheet.style.height =sketchUpImageArray[0].height + “px”;   sheet.onmousemove = handleRotate;  sheet.onmousedown = handleMouseDown;   sheet.onmouseup =handleMouseUp;   sheet.onmouseout = handleMouseUp;   setOpacity(sheet,0.0);   show(sketchUpImageArray[0]);   }   /**    * When the mouse goesdown, start rotating the image    *    * @param {Event} mousedown event   */   function handleMouseDown(e) {     if (!e) { e = window.event; }    getMouseXY(e);     mouseXOrig = mouseX;     addToPos = 0;    mouseIsDown = true;     }   /**    * When the mouse goes up, stoprotating the image    *    * @param {Event} mouseup event    */  function handleMouseUp(e) {     mouseIsDown = false;     currentPos +=addToPos;     }   /**    * Divide the width of the html object by thenumber of images.    * As the mouse moves over the html object, show theappropriate    * image giving the illusion that the user is spinning theobject.    *    * @param {Event} mousemove event    */   functionhandleRotate(e) {     if (!e) { e = window.event; }     if(!mouseIsDown) {      return;     }     getMouseXY(e);   // STEP is howmany pixels equals an image swap     var STEP = 10;     var width =sketchUpObj.offsetWidth;     var delta = mouseX − mouseXOrig;    addToPos = Math.floor(delta/STEP);   // title.innerHTML = mouseX;  //handle wrap around     var wrap = (currentPos + addToPos) %imageCount;     var newPos = (wrap < 0) ? imageCount + wrap :Math.abs(wrap);   //hide everyone except the image we are over     for(var i = 0; i < imageCount; i++) {       hide(sketchUpImageArray[i]);       }     show(sketchUpImageArray[newPos]);     return false;     }  /**    * Get the mouse position from the event e    * @param {Event} emouse move event    */   function getMouseXY(e) {     if (e.pageX) {      mouseX = e.pageX;       mouseY = e.pageY;     } else {      mouseX = event.clientX + document.body.scrollLeft;       mouseY =event.clientY + document.body.scrollTop;     }     if (mouseX <0){mouseX = 0;}     if (mouseY < 0){mouseY = 0;}   }   /**    * Get theleft coordinate of the element   */   function getLeft(element) {    var x = 0;     while (element) {       x += element.offsetLeft;      element = element.offsetParent;     }     return x;   };  function setOpacity(element, opacity) {     element.style.filter =“alpha(opacity=“ +     Math.round(opacity*100) + ”)”;    element.style.opacity = opacity;   }   /**    * Hides the HTMLelement.    * @param element HTMLElement the element we hide    */  function hide(element) {     element.style.display = ‘none’;   }   /**   * show the HTML element.    * @param element HTMLElement the elementwe want to see.    */   function show(element) {    element.style.display = ‘block’;   }   </SCRIPT>   </HEAD>   <BODYonload=init( )>   <DIV id=‘title’> Lamborghinii<DIV id=date>Generated at01:59PM Wednesday, 28 November, 2007</DIV> </DIV>   <CENTER><DIVid=‘sketchUpObj’></DIV></CENTER>   </BODY>   </HTML>

Other various techniques for allowing a user to interact with anddisplay various ones of the saved images may also be employed.

FIGS. 8G-8J show screen shots of dialog boxes for managing image captureof a model. These screenshots are similar to those just discussed, butshow alternative mechanisms for interacting with a user of such asystem. FIG. 8G shows a dialog box like that shown in FIG. 8A. Inparticular, the dialog box shows an example first image of a model beingimaged, and permits a user to enter three parameters associated withsuch imaging. The first parameter is the number of degrees between eachimage in a circle around the model being images. The second is the sizeof the images to be generated, in terms of pixels in the X and Ydirections. The third is a folder in which the images and otherassociated files are to be placed, with a button control that the usercan select to change the folder. For example, the system may initiallyshow a default folder such as the common mydocuments folder forMICROSOFT WINDOWS computers, and the user may change to a differentfolder.

FIG. 8H shows a dialog box by which a user is navigating a folderstructure on an computer, and is this similar to FIG. 8B. The dialog boxmay be generated, as discussed above, in a web browser window made tolook like a file manager dialog box, where the code generating thebrowser window communicates with a conduit application that gives itaccess to file system information.

FIG. 8I shows a dialog box for exporting of files needed to review ananimation that simulates a 3-D model. The dialog box shows one image ofa model, and permits a user to place a cursor on the image and drag leftand right to cause other images to be displayed in sequence. In such amanner, the user can seem to be pulling the model around so as to see itin a seeming 3-D state.

FIG. 8J shows a dialog box for creating a new sub-directory for savingfiles relating to a model. Such a dialog box is shown over the dialogbox of FIG. 8H, and may be generated when a user selects the “Create aNew Directory” control of the dialog box in FIG. 8H. Such creation of anew directory may be simulated by the dialog box of FIG. 8J, and may beachieved in reality by the program that generates the dialog box as partof a web browser communicating with a conduit application, such as inthe manners discussed above.

FIG. 9 shows an example of a generic computer device 900 and a genericmobile computer device 950, which may be used with the techniquesdescribed here. Computing device 900 is intended to represent variousforms of digital computers, such as laptops, desktops, workstations,personal digital assistants, servers, blade servers, mainframes, andother appropriate computers. Computing device 950 is intended torepresent various forms of mobile devices, such as personal digitalassistants, cellular telephones, smartphones, and other similarcomputing devices. The components shown here, their connections andrelationships, and their functions, are meant to be exemplary only, andare not meant to limit implementations of the inventions describedand/or claimed in this document.

Computing device 900 includes a processor 902, memory 904, a storagedevice 906, a high-speed interface 908 connecting to memory 904 andhigh-speed expansion ports 910, and a low speed interface 912 connectingto low speed bus 914 and storage device 906. Each of the components 902,904, 906, 908, 910, and 912, are interconnected using various busses,and may be mounted on a common motherboard or in other manners asappropriate. The processor 902 can process instructions for executionwithin the computing device 900, including instructions stored in thememory 904 or on the storage device 906 to display graphical informationfor a GUI on an external input/output device, such as display 916coupled to high speed interface 908. In other implementations, multipleprocessors and/or multiple buses may be used, as appropriate, along withmultiple memories and types of memory. Also, multiple computing devices900 may be connected, with each device providing portions of thenecessary operations (e.g., as a server bank, a group of blade servers,or a multi-processor system).

The memory 904 stores information within the computing device 900. Inone implementation, the memory 904 is a volatile memory unit or units.In another implementation, the memory 904 is a non-volatile memory unitor units. The memory 904 may also be another form of computer-readablemedium, such as a magnetic or optical disk.

The storage device 906 is capable of providing mass storage for thecomputing device 900. In one implementation, the storage device 906 maybe or contain a computer-readable medium, such as a floppy disk device,a hard disk device, an optical disk device, or a tape device, a flashmemory or other similar solid state memory device, or an array ofdevices, including devices in a storage area network or otherconfigurations. A computer program product can be tangibly embodied inan information carrier. The computer program product may also containinstructions that, when executed, perform one or more methods, such asthose described above. The information carrier is a computer- ormachine-readable medium, such as the memory 904, the storage device 906,memory on processor 902, or a propagated signal.

The high speed controller 908 manages bandwidth-intensive operations forthe computing device 900, while the low speed controller 912 manageslower bandwidth-intensive operations. Such allocation of functions isexemplary only. In one implementation, the high-speed controller 908 iscoupled to memory 904, display 916 (e.g., through a graphics processoror accelerator), and to high-speed expansion ports 910, which may acceptvarious expansion cards (not shown). In the implementation, low-speedcontroller 912 is coupled to storage device 906 and low-speed expansionport 914. The low-speed expansion port, which may include variouscommunication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet)may be coupled to one or more input/output devices, such as a keyboard,a pointing device, a scanner, or a networking device such as a switch orrouter, e.g., through a network adapter.

The computing device 900 may be implemented in a number of differentforms, as shown in the figure. For example, it may be implemented as astandard server 920, or multiple times in a group of such servers. Itmay also be implemented as part of a rack server system 924. Inaddition, it may be implemented in a personal computer such as a laptopcomputer 922. Alternatively, components from computing device 900 may becombined with other components in a mobile device (not shown), such asdevice 950. Each of such devices may contain one or more of computingdevice 900, 950, and an entire system may be made up of multiplecomputing devices 900, 950 communicating with each other.

Computing device 950 includes a processor 952, memory 964, aninput/output device such as a display 954, a communication interface966, and a transceiver 968, among other components. The device 950 mayalso be provided with a storage device, such as a microdrive or otherdevice, to provide additional storage. Each of the components 950, 952,964, 954, 966, and 968, are interconnected using various buses, andseveral of the components may be mounted on a common motherboard or inother manners as appropriate.

The processor 952 can execute instructions within the computing device950, including instructions stored in the memory 964. The processor maybe implemented as a chipset of chips that include separate and multipleanalog and digital processors. The processor may provide, for example,for coordination of the other components of the device 950, such ascontrol of user interfaces, applications run by device 950, and wirelesscommunication by device 950.

Processor 952 may communicate with a user through control interface 958and display interface 956 coupled to a display 954. The display 954 maybe, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display)or an OLED (Organic Light Emitting Diode) display, or other appropriatedisplay technology. The display interface 956 may comprise appropriatecircuitry for driving the display 954 to present graphical and otherinformation to a user. The control interface 958 may receive commandsfrom a user and convert them for submission to the processor 952. Inaddition, an external interface 962 may be provide in communication withprocessor 952, so as to enable near area communication of device 950with other devices. External interface 962 may provide, for example, forwired communication in some implementations, or for wirelesscommunication in other implementations, and multiple interfaces may alsobe used.

The memory 964 stores information within the computing device 950. Thememory 964 can be implemented as one or more of a computer-readablemedium or media, a volatile memory unit or units, or a non-volatilememory unit or units. Expansion memory 974 may also be provided andconnected to device 950 through expansion interface 972, which mayinclude, for example, a SIMM (Single In Line Memory Module) cardinterface. Such expansion memory 974 may provide extra storage space fordevice 950, or may also store applications or other information fordevice 950. Specifically, expansion memory 974 may include instructionsto carry out or supplement the processes described above, and mayinclude secure information also. Thus, for example, expansion memory 974may be provide as a security module for device 950, and may beprogrammed with instructions that permit secure use of device 950. Inaddition, secure applications may be provided via the SIMM cards, alongwith additional information, such as placing identifying information onthe SIMM card in a non-hackable manner.

The memory may include, for example, flash memory and/or NVRAM memory,as discussed below. In one implementation, a computer program product istangibly embodied in an information carrier. The computer programproduct contains instructions that, when executed, perform one or moremethods, such as those described above. The information carrier is acomputer- or machine-readable medium, such as the memory 964, expansionmemory 974, memory on processor 952, or a propagated signal that may bereceived, for example, over transceiver 968 or external interface 962.

Device 950 may communicate wirelessly through communication interface966, which may include digital signal processing circuitry wherenecessary. Communication interface 966 may provide for communicationsunder various modes or protocols, such as GSM voice calls, SMS, EMS, orMMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others.Such communication may occur, for example, through radio-frequencytransceiver 968. In addition, short-range communication may occur, suchas using a Bluetooth, WiFi, or other such transceiver (not shown). Inaddition, GPS (Global Positioning System) receiver module 970 mayprovide additional navigation- and location-related wireless data todevice 950, which may be used as appropriate by applications running ondevice 950.

Device 950 may also communicate audibly using audio codec 960, which mayreceive spoken information from a user and convert it to usable digitalinformation. Audio codec 960 may likewise generate audible sound for auser, such as through a speaker, e.g., in a handset of device 950. Suchsound may include sound from voice telephone calls, may include recordedsound (e.g., voice messages, music files, etc.) and may also includesound generated by applications operating on device 950.

The computing device 950 may be implemented in a number of differentforms, as shown in the figure. For example, it may be implemented as acellular telephone 980. It may also be implemented as part of asmartphone 982, personal digital assistant, or other similar mobiledevice.

Various implementations of the systems and techniques described here canbe realized in digital electronic circuitry, integrated circuitry,specially designed ASICs (application specific integrated circuits),computer hardware, firmware, software, and/or combinations thereof.These various implementations can include implementation in one or morecomputer programs that are executable and/or interpretable on aprogrammable system including at least one programmable processor, whichmay be special or general purpose, coupled to receive data andinstructions from, and to transmit data and instructions to, a storagesystem, at least one input device, and at least one output device.

These computer programs (also known as programs, software, softwareapplications or code) include machine instructions for a programmableprocessor, and can be implemented in a high-level procedural and/orobject-oriented programming language, and/or in assembly/machinelanguage. As used herein, the terms “machine-readable medium”“computer-readable medium” refers to any computer program product,apparatus and/or device (e.g., magnetic discs, optical disks, memory,Programmable Logic Devices (PLDs)) used to provide machine instructionsand/or data to a programmable processor, including a machine-readablemedium that receives machine instructions as a machine-readable signal.The term “machine-readable signal” refers to any signal used to providemachine instructions and/or data to a programmable processor.

To provide for interaction with a user, the systems and techniquesdescribed here can be implemented on a computer having a display device(e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor)for displaying information to the user and a keyboard and a pointingdevice (e.g., a mouse or a trackball) by which the user can provideinput to the computer. Other kinds of devices can be used to provide forinteraction with a user as well; for example, feedback provided to theuser can be any form of sensory feedback (e.g., visual feedback,auditory feedback, or tactile feedback); and input from the user can bereceived in any form, including acoustic, speech, or tactile input.

The systems and techniques described here can be implemented in acomputing system that includes a back end component (e.g., as a dataserver), or that includes a middleware component (e.g., an applicationserver), or that includes a front end component (e.g., a client computerhaving a graphical user interface or a Web browser through which a usercan interact with an implementation of the systems and techniquesdescribed here), or any combination of such back end, middleware, orfront end components. The components of the system can be interconnectedby any form or medium of digital data communication (e.g., acommunication network). Examples of communication networks include alocal area network (“LAN”), a wide area network (“WAN”), and theInternet.

The computing system can include clients and servers. A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other.

A number of embodiments have been described. Nevertheless, it will beunderstood that various modifications may be made without departing fromthe spirit and scope of the invention. For example, much of thisdocument has been described with respect to television advertisements,but other forms of future, viewership-based advertisements may also beaddressed, such as radio advertisements and on-line videoadvertisements.

In addition, the logic flows depicted in the figures do not require theparticular order shown, or sequential order, to achieve desirableresults. In addition, other steps may be provided, or steps may beeliminated, from the described flows, and other components may be addedto, or removed from, the described systems. Accordingly, otherembodiments are within the scope of the following claims.

1. A computer-implemented method comprising: accessing, by athree-dimensional modeling application, a three-dimensional model of athree-dimensional object; generating, by the three-dimensional modelingapplication, a progression of images of the three-dimensional model andsaving the images at a determined location; generating mark-up code fordisplaying image manipulation controls and for permitting display of theprogression of images in response to user interaction with the imagemanipulation controls; and providing the images and mark-up code for useby a third-party application.
 2. The method of claim 1, wherein thethird-party application comprises a web browser.
 3. The method of claim2, wherein the web browser permits interaction with the images in theweb browser's native form.
 4. The method of claim 1, wherein generatingthe progression of images comprises directing the three-dimensionalmodeling application to take pictures in a loop around a perimeter ofthe three-dimensional model.
 5. The method of claim 1, furthercomprising packaging the images and mark-up code for transmission to aremote third-party application.
 6. The method of claim 1, furthercomprising transmitting to the third-party application a network addressfor the mark-up code.
 7. The method of claim 1, further comprisingreceiving from a user an indicator relating to a number of images togenerate around an exterior of the three-dimensional model andgenerating the images at substantially equally spaced positions aroundthe exterior of the three-dimensional model.
 8. The method of claim 1,further comprising storing each image of the plurality of images as aseparate image file, and generating the mark-up code to refer to theimage files.
 9. The method of claim 1, wherein the mark-up code can beexecuted by a native web browser without using browser plug-ins.
 10. Themethod of claim 1, further comprising receiving from a user anindication of an image traversal path and generating the progression ofimages along the image traversal path.
 11. The method of claim 10,wherein the image traversal path is defined by points distributed inmultiple dimensions about a sphere.
 12. The method of claim 1, furthercomprising generating a display in a browser associated with thethree-dimensional model, receiving user parameters identifying thedetermined location, and communicating the determined location to anoperating system.
 13. The method of claim 1, wherein thethree-dimensional modeling application comprises a computer-aided designapplication.
 14. A system comprising: one or more computers and one ormore storage devices storing instructions that are operable, whenexecuted by the one or more computers, to cause the one or morecomputers to perform operations comprising: accessing, by athree-dimensional modeling application, a three-dimensional model of athree-dimensional object; generating, by the three-dimensional modelingapplication, a progression of images of the three-dimensional model andsaving the images at a determined location; generating mark-up code fordisplaying image manipulation controls and for permitting display of theprogression of images in response to user interaction with the imagemanipulation controls; and providing the images and mark-up code for useby a third-party application.
 15. The system of claim 14, whereingenerating the progression of images comprises directing thethree-dimensional modeling application to take pictures in a loop arounda perimeter of the three-dimensional model.
 16. The system of claim 14,wherein the mark-up code can be executed by a native web browser withoutusing browser plug-ins.
 17. The system of claim 14, wherein theoperations further comprise generating a display in a web browserassociated with the three-dimensional model, receiving user parametersidentifying the determined location, and communicating the determinedlocation to an operating system.
 18. A non-transitory computer-readablemedium storing software comprising instructions executable by one ormore computers which, upon such execution, cause the one or morecomputers to perform operations comprising: accessing, by athree-dimensional modeling application, a three-dimensional model of athree-dimensional object; generating, by the three-dimensional modelingapplication, a progression of images of the three-dimensional model andsaving the images at a determined location; generating mark-up code fordisplaying image manipulation controls and for permitting display of theprogression of images in response to user interaction with the imagemanipulation controls; and providing the images and mark-up code for useby a third-party application.
 19. The medium of claim 18, whereingenerating the progression of images comprises directing thethree-dimensional modeling application to take pictures in a loop arounda perimeter of the three-dimensional model.
 20. The medium of claim 18,wherein the mark-up code can be executed by a native web browser withoutusing browser plug-ins.